home *** CD-ROM | disk | FTP | other *** search
/ Game Cracker (Expanded Edition) / Game Cracker (Expanded Edition).iso / cracks / SV_CPEDE.ZIP / Centipede.txt < prev    next >
Encoding:
Text File  |  1999-05-19  |  13.9 KB  |  278 lines

  1.  
  2. Free Information Xchange presents:
  3.  
  4. Centipede - CD crack by Static Vengeance - Nov 1st, 1998
  5.  
  6. REQUIREMENTS:
  7. Full game install and hex editor
  8. W32Dasm from RUSoft
  9. Soft-ice (Win95) from NuMega
  10.  
  11.     Hasbro has taken a classic arcade game and turned it into a 3D modern shooter/arcade game.
  12. Actually Hasbro did take this timeless classic and made it better.  Both the arcade and the adventure
  13. portions of the game are much inproved over the original concept.  You can even play over the net, with
  14. a modem direct connect or on a split screen.  There is one bug Hasbro interduced with this newly upgraded
  15. game.  That bug is the need for the original CD to be in the drive when you want to play the game.  This
  16. bug must be FiX'ed so we can play any time without digging around for the CD.  So get out your tools and
  17. start up W32Dasm and disassemble centi.exe.  Using the data string references scroll down the pop-up box
  18. and double click on "Error scanning directory. Is the " this will put you in the middle of one part of
  19. the CD check routine.  That routine goes like this:
  20.  
  21. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  22. |:0044D274(C)                                                             <-- Gets here via conditional jump
  23. |
  24. :0044D30E E8CD000900              call 004DD3E0
  25. :0044D313 8B10                    mov edx, dword ptr [eax]
  26. :0044D315 89E0                    mov eax, esp
  27. :0044D317 E87452FBFF              call 00402590
  28. :0044D31C 84C0                    test al, al
  29. :0044D31E 0F8456FFFFFF            je 0044D27A
  30.  
  31. * Possible StringData Ref from Data Obj ->"Error scanning directory. Is the "  <-- Pop-up dialog and REF
  32.                                         ->"proper CD in the drive?"            <-- that got us here
  33.                                   |
  34. :0044D324 687CD55100              push 0051D57C
  35. :0044D329 E86241FCFF              call 00411490
  36. :0044D32E 83C404                  add esp, 00000004
  37. :0044D331 E944FFFFFF              jmp 0044D27A                                 <-- Jump back near sender
  38.  
  39.     Not a lot of info here, so we'll take a look at the sender.  You can see that Centipede gets
  40. here by a conditional jump.  Then after it prints the pop-up dialog box it send you back near to the
  41. conditional jump that brought us here in the first place.  Okay, checking out the code at 44D274:
  42.  
  43. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  44. |:0044D27C(C)                                                       <-- Loop based on a conditinal jump
  45. |
  46. :0044D269 89E0                    mov eax, esp
  47. :0044D26B E89C080900              call 004DDB0C                     <-- Need to make this call
  48. :0044D270 89C7                    mov edi, eax                      <-- Get the returned value into edi
  49. :0044D272 85C0                    test eax, eax
  50. :0044D274 0F8494000000            je 0044D30E                       <-- eax = zero, then ask for the CD!
  51.  
  52. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  53. |:0044D31E(C), :0044D331(U)                                         <-- After asking for CD return here
  54. |
  55. :0044D27A 85FF                    test edi, edi
  56. :0044D27C 74EB                    je 0044D269                       <-- The conditional "loop" jump
  57. :0044D27E 0F84C0000000            je 0044D344
  58. :0044D284 31ED                    xor ebp, ebp                      <-- Getting here continues the game
  59.  
  60. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  61. |:0044D2DC(C), :0044D309(U)
  62. |
  63. :0044D286 89F8                    mov eax, edi                      <-- Put returned value back into eax
  64. :0044D288 E88F080900              call 004DDB1C                     <-- Continuing game code.
  65.  
  66.     Well after some checking the call to 4DDB0C must be made.  Eax has a vital returned value that
  67. gets moved to edi.  The value is temporarily stored in edi and then moved back into eax and used for
  68. the call to 4DDB1C (made at 44D288).  The question is how do we get the right value for a good CD check.
  69. Then how do we get down to 44D286 with eax still containing the needed value.  This is where soft-ice
  70. comes to our rescue!  I set soft-ice to break in 44D270, which is right after the call to 4DDB0C.  Then
  71. I put the original Centipede CD in the drive and ran the game.  Soft-ice popped right up and showed eax
  72. held the value of 00F638A8.  That's the value we need to get things going.  Now I changed the code to
  73. load the right value and get us down to 44D286.  The changes would look like this:
  74.  
  75. :0044D26B E89C080900              call 004DDB0C                     <-- Need to make this call
  76. :0044D270 89C7                    mov edi, eax                      <-- Get the returned value into edi
  77. :0044D272 85C0                    test eax, eax
  78. :0044D274 B8A838F600              move eax, 00F638A8                <-- The value from a good CD read
  79. :0044D279 90                      nop                               <-- Filler byte
  80. :0044D27A 89C7                    mov edi, eax                      <-- Get the returned value into edi
  81. :0044D27C EB06                    jmp 0044D284                      <-- Jump down to the "continue" code
  82. :0044D27E 0F84C0000000            je 0044D344
  83.  
  84. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  85. |:0044D27C(U)
  86. |
  87. :0044D284 31ED                    xor ebp, ebp                      <-- Getting here continues the game
  88.  
  89. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  90. |:0044D2DC(C), :0044D309(U)
  91. |
  92. :0044D286 89F8                    mov eax, edi                      <-- Put returned value back into eax
  93. :0044D288 E88F080900              call 004DDB1C                     <-- Continuing game code.
  94.  
  95.     Alright, Centipede is cracked!, right??  Well, not quite, now when you run Centipede you need
  96. a CD in the CD rom drive.  Any CD will work, but you still NEED one in the drive when you try to play
  97. a game.  So I looked and searched and looked and searched the code for CD access routines.  I found
  98. some calls through mss32.dll that call the _ail_redbook_xxxx (Status, trackinfo, play, pause, ect),
  99. but any changes made in those calls had no effect on Centipede's need for some CD to be online.  Well,
  100. if you keep trying and looking around eventually (if it means enough to you) you will find the answer.
  101. I checked the installed files in the Centipede game directory and found a file called fakecd.txt.  I
  102. opened the file and it contained the leter of my CD rom drive.  Smack in the face comes the answer!
  103. Getting back into W32Dasm I checked for a REF and double clicked on it and found this:
  104.  
  105. * Referenced by a CALL at Addresses:
  106. |:004378EF   , :0044C870   , :0044C88C   , :004B5B1F             <-- Called by four routines
  107. |
  108. :004B6750 55                      push ebp
  109. :004B6751 83EC04                  sub esp, 00000004
  110. :004B6754 89C5                    mov ebp, eax
  111. :004B6756 8A253C5B6300            mov ah, byte ptr [00635B3C]
  112. :004B675C 84E4                    test ah, ah
  113. :004B675E 740A                    je 004B676A            <-- Take this jump for the "fakecd" routine
  114. :004B6760 B8E05A6300              mov eax, 00635AE0
  115. :004B6765 83C404                  add esp, 00000004
  116. :004B6768 5D                      pop ebp
  117. :004B6769 C3                      ret
  118.  
  119. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  120. |:004B675E(C)                                                        <-- Got here via above jump
  121. |
  122. :004B676A 57                      push edi
  123. :004B676B 56                      push esi
  124. :004B676C 52                      push edx
  125. :004B676D 51                      push ecx
  126. :004B676E B201                    mov dl, 01
  127. :004B6770 8825E05A6300            mov byte ptr [00635AE0], ah
  128.  
  129. * Possible StringData Ref from Data Obj ->"FAKECD"                   <-- String ref that got me here
  130.                                   |
  131. :004B6776 B8805E5300              mov eax, 00535E80
  132. :004B677B 88153C5B6300            mov byte ptr [00635B3C], dl
  133. :004B6781 E80ACC0300              call 004F3390
  134. :004B6786 85C0                    test eax, eax
  135. :004B6788 0F84CC000000            je 004B685A
  136. :004B678E BFE05A6300              mov edi, 00635AE0
  137. :004B6793 89C6                    mov esi, eax
  138. :004B6795 57                      push edi
  139.  
  140.   -- SNIP uninformative code, but checking other REFs and looking for the exit section --
  141.  
  142. :004B67F6 5F                      pop edi
  143.  
  144. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  145. |:004B67C1(C), :004B67C5(C), :004B67C9(C)
  146. |
  147. :004B67F7 68E05A6300              push 00635AE0
  148.  
  149. * Possible StringData Ref from Data Obj ->"fakecd env path=%s"       <-- Still doing the fakecd thing
  150.                                   |
  151. :004B67FC 68895E5300              push 00535E89
  152. :004B6801 E83AB0F4FF              call 00401840
  153. :004B6806 83C408                  add esp, 00000008
  154.  
  155.   -- SNIP more code --
  156.  
  157. :004B6839 5F                      pop edi
  158. :004B683A 68E05A6300              push 00635AE0
  159.  
  160. * Possible StringData Ref from Data Obj ->"gtecdpath ret = %s"   <-- Still doing the fackcd stuff!
  161.                                   |
  162. :004B683F 68BE5E5300              push 00535EBE
  163. :004B6844 E8F7AFF4FF              call 00401840
  164. :004B6849 B8E05A6300              mov eax, 00635AE0
  165. :004B684E 83C408                  add esp, 00000008
  166. :004B6851 59                      pop ecx
  167. :004B6852 5A                      pop edx
  168. :004B6853 5E                      pop esi
  169. :004B6854 5F                      pop edi
  170. :004B6855 83C404                  add esp, 00000004
  171. :004B6858 5D                      pop ebp
  172. :004B6859 C3                      ret                            <-- Finally the exit
  173.  
  174.     Now, the interesting part is the section of code that actually read the text file, there are no
  175. direct jumps or references to this section.  The first reference is to a conditional further down in the code
  176. itself.  So I just left the fakecd.txt in the directory.
  177.  
  178. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  179. |:004B6788(C)
  180. |
  181.  
  182. * Possible StringData Ref from Data Obj ->"r"                  <-- Get ready to read the file
  183.                                   |
  184. :004B685A BA9C5E5300              mov edx, 00535E9C
  185.  
  186. * Possible StringData Ref from Data Obj ->"fakecd.txt"         <-- The file with your CD-rom letter
  187.                                   |
  188. :004B685F B89E5E5300              mov eax, 00535E9E
  189. :004B6864 E80FB0F5FF              call 00411878
  190. :004B6869 89442410                mov dword ptr [esp+10], eax
  191. :004B686D 85C0                    test eax, eax
  192. :004B686F 7498                    je 004B6809
  193. :004B6871 53                      push ebx
  194. :004B6872 BA50000000              mov edx, 00000050
  195. :004B6877 89C3                    mov ebx, eax
  196. :004B6879 B8E05A6300              mov eax, 00635AE0
  197. :004B687E BEE05A6300              mov esi, 00635AE0
  198. :004B6883 E808B1F5FF              call 00411990
  199. :004B6888 B20A                    mov dl, 0A
  200.  
  201.   -- SNIP uninformative code --
  202.  
  203. :004B68F5 5F                      pop edi
  204.  
  205. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  206. |:004B68C0(C), :004B68C4(C), :004B68C8(C)
  207. |
  208. :004B68F6 68E05A6300              push 00635AE0
  209.  
  210. * Possible StringData Ref from Data Obj ->"fakecd.txt path=%s"
  211.                                   |
  212. :004B68FB 68AB5E5300              push 00535EAB
  213. :004B6900 E83BAFF4FF              call 00401840
  214. :004B6905 83C408                  add esp, 00000008
  215. :004B6908 8B442414                mov eax, dword ptr [esp+14]
  216. :004B690C E85FB1F5FF              call 00411A70
  217. :004B6911 5B                      pop ebx
  218. :004B6912 E9F2FEFFFF              jmp 004B6809
  219.  
  220. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  221. |:004B680B(C)
  222. |
  223.  
  224. * Possible StringData Ref from Data Obj ->"data"
  225.                                   |
  226. :004B6917 BEE0FD5400              mov esi, 0054FDE0
  227. :004B691C BFE05A6300              mov edi, 00635AE0
  228. :004B6921 E9F2FEFFFF              jmp 004B6818
  229. :004B6926 00000000000000000000    BYTE 10 DUP(0)
  230.  
  231.     To continue with the tutorial, I put a "ret" as the first instruction (at 4B6750) just to see
  232. if it would have any effect on the game's need for CD.  To make a long story short, I got REAL lucky!
  233. That additional edit killed the requirement for a CD to be online.  Well I'll take being lucky on this one
  234. and call this tutorial finished.  The last thing I did was to check into killing some of the intro and
  235. logo smk (smacker) movies.  I have included those edits as well as the edits to FiX Centipede below.
  236.  
  237.     After some testing I found out that my original patch will only function on my machine.  So I
  238. changed the first conditional jump to a jump (always) to the continue section.  This forces Centipede to
  239. continue loading no matter what the result of the CD check was.  This new edit will work on all machines
  240. as I have tested it out on several configurations and several different systems.  The corrected patch is
  241. listed below.  To make a cracked copy of Centipede follow these instructions:
  242.  
  243. 1.  Do a full/max install of the game
  244. 2.  Make the following edits:
  245.  
  246. Edit Centi.exe
  247. ================================================
  248. Search for: 0F 84 94 00 00 00  at offset 312,948
  249. Change to : 90 E9 0A -- -- --
  250.  
  251. Search for: 55 83 EC 04 89 C5  at offset 744,272
  252. Change to : C3 -- -- -- -- --
  253.  
  254.     Optional: Kill intro .SMK movies
  255.  
  256. Search for: 0F 84 C3 05 00 00  at offset   4,890
  257. Change to : -- -- 00 00 -- --
  258.  
  259. Edit Centi.exe from the D3D patch off the net
  260. ================================================
  261. Search for: 0F 84 92 00 00 00  at offset 268,375
  262. Change to : 90 E9 09 -- -- --
  263.  
  264. Search for: 55 83 EC 04 89 C5  at offset 788,000
  265. Change to : C3 -- -- -- -- --
  266.  
  267.     Optional: Kill intro .SMK movies
  268.  
  269. Search for: 0F 84 16 05 00 00  at offset   5,321
  270. Change to : -- -- 00 00 -- --
  271.  
  272. 3.  Delete hasbro, intro, llslogo, mondo and opening ".smk" files if you
  273.     made the kill intro patch.  This saves ~62 megs of h/d space.
  274.  
  275.     Another tutorial comes to an end and another game has been FiX'ed!
  276.  
  277. Static Vengeance - FiX
  278.